package co.baiku.boot.im.tencent.model;

import co.baiku.boot.common.tools.ObjectTools;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 通过服务端集成的 Rest API 接口，只能发送
 * TIMTextElem，TIMLocationElem，TIMFaceElem，TIMCustomElem 类型的消息，
 * 其它类型的消息（TIMSoundElem，TIMImageElem，TIMFileElem）不能通过 Rest API 接口发送。
 */
public enum TencentImMsgType {
    /**
     * 文本消息
     */
    TIMTextElem,
    /**
     * 表情消息
     */
    TIMFaceElem,
    /**
     * 位置消息
     */
    TIMLocationElem,
    /**
     * 自定义消息,当接收方为 iOS 系统且应用处在后台时，此消息类型可携带除文本以外的字段到 APNs。一条组合消息中只能包含一个 TIMCustomElem 自定义消息元素。
     */
    TIMCustomElem,
    /**
     * 语音消息。（服务端集成 Rest API 不支持发送该类消息）
     */
    TIMSoundElem,
    /**
     * 图像消息。（服务端集成 Rest API 不支持发送该类消息）
     */
    TIMImageElem,
    /**
     * 文件消息。（服务端集成 Rest API 不支持发送该类消息）
     */
    TIMFileElem,
    /**
     * 未知类型
     */
    UNKNOWN;

    public static Map<String, TencentImMsgType> values;

    public static TencentImMsgType of(String type) {
        if (ObjectTools.isBlank(values)) {
            values = new ConcurrentHashMap<>();
            for (TencentImMsgType value : TencentImMsgType.values()) {
                values.put(value.name(), value);
            }
        }
        return values.getOrDefault(type, UNKNOWN);
    }

}
